package com.shakespace.effectivejava.edition3.chapter10;

/**
 * 保证失败的原子性
 * 在对象抛出异常之后，通常希望对象仍然处于定义良好的可用状态，即使在执行操作时发生了故障。
 * 一般来说，失败的方法调用应该使对象处于调用之前的状态。
 * 具有此属性的方法称为具备失败原子性（failure atomic）。
 * <p>
 * 方法：
 * 1. 设计一个不可变对象
 * 2. 对于可变对象，先检查可能抛出异常的情况，例如size==0，先抛出异常
 * 3. 将可能会失败的操作先进行，最后执行状态修改
 * 4. 临时拷贝一份对象执行操作，如果成功则替代原有，如果失败则继续使用原有对象
 * 5. 写一段恢复代码执行恢复操作
 * <p>
 * 作为规则，也作为方法规范的一部分，生成的任何异常都应该使对象保持在方法调用之前的状态。
 * 如果违反了这条规则，API 文档应该清楚地指出对象将处于什么状态。不幸的是，许多现有的 API 文档都没有做到。
 */
public class E076_AtomicException {
}
